# coding=utf-8

import pandas as pd
import unittest
import os

from src.config import Config

def getConfigWay(value:str):
    if value == "1-按方法运行":
        return 1
    elif value == "2-按类名运行":
        return 2
    elif value == "3-按路径运行":
        return 3

def getPath(value:str):
    value = value.replace("\\", ".")
    if value[0] == ".":
        value = value[1:]
    if value[-1] == ".":
        value = value[:-1]
    return value

def getFileName(value:str):
    if "." not in value:
        return value
    return ".".join(value.split(".")[0:-1])

def getClassName(value:str):
    return value

def getFunctionName(value:str):
    return value

def whetherRun(value:str):
    """
    说明：
        判断是否运行该用例
    :param value: type = <class str> 
    :return: type = <class boolean>
    """
    if ("N" in value) or ("n" in value) or ("否" in value) or ("不" in value) :
        return False
    else:
        return True

def addTestCaseByExcel(suite):
    # 构造测试集 方法1 添加测试用例类中的方法(函数)
    # suite.addTest(Test_1('test_baidu_1_search'))
    # suite.addTest(Test_2('test_baidu_2_search'))
    # suite.addTest(Test_2('test_baidu_3_search'))
    # suite.addTest(Test_zhaopin_1('test_search_1'))
    # suite.addTest(Test_3('test_1_jira'))
    # suite.addTest(Test_5('test_1_createIssure'))
    # 构造测试集 方法2 添加测试用例类中的所有方法(函数)
    # suite = unittest.TestSuite(unittest.makeSuite(Test_2))
    # 构造测试集 方法3 添加目录中所有的测试用例类的方法(函数)
    # suite = unittest.TestLoader().discover("test")
    # 构造测试集 方法4 按照Excel案例配置运行
    # addTestCaseByExcel(suite)
    df = pd.read_excel(io=Config.projectDir + r"\config\测试案例运行配置.xlsx", sheet_name=0) # 只读取第一个sheet页
    max_row = df.shape[0] # 案例个数
    for i in range(max_row):
        if whetherRun(df.at[i, "是否执行"]):
            path = getPath(df.at[i, "路径"])
            filename = getFileName(df.at[i, "文件名"])
            classname = getClassName(df.at[i, "类名"])
            funname = getFunctionName(df.at[i, "方法名"])
            if getConfigWay(df.at[i, "配置方式"]) == 1: # 按方法运行
                import_str = "from " + path + "." + filename + " import " + classname
                addTest_str = "suite.addTest(" + classname + "('" + funname + "'))"
                exec(import_str)
                eval(addTest_str)
            elif getConfigWay(df.at[i, "配置方式"]) == 2: # 按类名运行
                import_str = "from " + path + "." + filename + " import " + classname
                addTest_str = "suite.addTest(unittest.makeSuite(" + classname + "))"
                exec(import_str)
                eval(addTest_str)
            elif getConfigWay(df.at[i, "配置方式"]) == 3: # 按路径运行
                addTest_str = "suite.addTest(unittest.TestLoader().discover(\"" + path + "\"" + "))" # suite.addTest(unittest.TestLoader().discover("test"))
                eval(addTest_str)